<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vue.js"></script>
    <style>
        [v-clock]{
            display: none;
        }
        .main{
            width: 125px;
        }
        button{
            display: block;
            width: 100px;
            color: #ffffff;
            border: 0;
            padding: 6px;
            text-align: center;
            font-size: 12px;
            border-radius: 4px;
            cursor: pointer;
            outline: none;
            position: relative;
        }
        button:active{
            top: 1px;
            left: 1px;
        }
        .dropdown{
            width: 100%;
            height: 150px;
            margin: 5px 0;
            font-size: 12px;
            background-color: #fff;
            border-radius: 4px;
            box-shadow: 0 1px 6px rgba(0,0,0,.2);
        }
        .dropdown p{
            display: inline-block;
            padding: 6px;
        }
    </style>
</head>
<body>
<div id="app" v-cloak>
    <div class="main" v-clickoutside="handleClose">
        <button>点击显示下拉菜单</button>
        <div class="dropdown" v-show="show">
            <p>下拉框的内容，点击外面区域可以关闭</p>
        </div>
    </div>
</div>
<script>
    Vue.directive('clickoutside',{
        bind(el,binding,vnode){
            function documentHandler(e) {
                if (el.contains(e.target)){
                    return false
                }
                if (binding.expression){
                    binding.value(e)
                }
            }
            el.__vueClickOutside__=documentHandler
            document.addEventListener('click',documentHandler)
        },
        unbind(el,binding){
            document.removeEventListener('click',el.__vueClickOutside__)
            delete el.__vueClickOutside__()
        }
    })
    var vm = new Vue({
        el:'#app',
        data:{
            show:false
        },
        methods:{
            handleClose(){
                this.show = false
            }
        }
    })
</script>
</body>
</html>
